package cn.laoma.thread5.t5_003_Concurrent_Container;

import lombok.SneakyThrows;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.SynchronousQueue;

/**
 * @program: ThreadDemos
 * @description: 同步阻塞队列
 * 1.容量为0的队列
 * 2.用于两个线程交换数据，本质是把一个线程的数据直接递给另外一个线程
 * 3.和Lock_13Exchanger非常像。但是使用简单
 * @author: 老马
 * @create: 2021-10-03 21:19
 **/
public class T08_SynchronousQueue {

    @SneakyThrows
    public static void main(String[] args) {
        BlockingQueue<String> queue = new SynchronousQueue<>();

        new Thread(() -> {
            try {
                System.out.println(queue.take());
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();

        //阻塞线程等待另一个线程消费
        queue.put("馒头");

        //直接add会报错，但是sleep一秒就不会报错，为什么？
        //Thread.sleep(1000);
        //queue.add("馒头");
    }
}